the original implementation of rolling QMK modifiers only allowed proper case words with leading capitalization during rapid finger rolls. While not a huge imposition—all caps can be typed by respecting the TAPPING_TERM setting or enabling the CapsLock—it is possible to implement rolling capitalization with a minor change to the mod_roll function by checking the shift state of columns 3 (A) and 6 (T)..
#define ROLL(s, k) ((s == LEFT) && e[6].shift) || ((s == RIGHT) && e[3].shift) ? tap_shift(k) : tap_key(k)
void mod_roll(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t modifier, uint16_t keycode, uint8_t column)
{
if (KEY_DOWN) {
e[column].key_timer = timer_read();
e[column].keycode = keycode;
e[column].shift = shift;
e[column].side = side;
prev_key = next_key;
next_key = column;
if (modifier) { register_modifier(modifier); }
}
else {
if (modifier) { unregister_modifier(modifier); }
if (timer_elapsed(e[column].key_timer) < TAPPING_TERM) {
if (e[column].key_timer < e[next_key].key_timer) {
mod_all(unregister_code, 0);
if (e[column].shift && (e[column].side != e[next_key].side)) {
tap_shift(e[next_key].keycode);
e[next_key].key_timer = 0;
}
else { ROLL(side, keycode); } // check shift
}
else { ROLL(side, keycode); e[prev_key].key_timer = 0; } // check shift
}
e[column].key_timer = 0;
e[column].shift = 0; // clear shift state
}
}